100 REM FASTER SQUARE ROOT PAL SOURCE 110 OPEN8,8,1,"0:FAST SQR.OBJ 120 [158] 700 130 .OPT O8 140 [172][178] $C000 150 ; FASTER SQUARE ROOT 160 ; TAKES FIRST BASIC VARIABLE [175] 170 ; [142]S SQUARE ROOT IN ITS PLACE 180 ; USES [162][164]N'S METHOD WITH A [203]OD 190 ; FIRST APPROXIMATI[145]. 200 ; 210 VAR [178] $2D ; START OF VARIABLES 220 PTR [178] $AA ; PO[181]S [164] VARIABLE 230 CTR [178] $AC ; ITERATI[145] COUNTER 240 TEMP [178] $5C ; TEMP S[164]RE [129] FLT PT # 250 ; 260 ; ROM ROUTINES 270 TEMF1 [178] $BBA2 ; UNPACK 5C [164] FAC#1 280 DIVID [178] $BB0F ; FAC#1[178]VAR[173]FAC#1 290 PLUS [178] $B867 ;FAC#1[178]FAC#2[170]FAC#1 300 F1TEM [178] $BBC7 ; PACK FAC#1 [164] 5C 310 F1MEM [178] $BBD4 ; PACK FAC#1 [164] MEM[176]Y 320 [153] [178] $FFD2 ; CHROUT ROUTINE 330 ; 340 LDY #$03 ;[161] VARIABLE'S MANTISSA 350 LDA (VAR),Y ;CHECK [139] NEGATIVE 360 BMI ERR[176]EXIT 370 DEY 380 LDA (VAR),Y ;[161] VARIABLE'S [189][145]ENT 390 BEQ [142] ;[142] [139] VAR[178]ZERO 400 LDA VAR ;PO[181]S [164] VAR NAME 410 CLC 420 ADC #$02 ;ADD 2 SO PTR 430 STA PTR ;PO[181]S [164] VARIABLE 440 LDA VAR[170]1 ;[175] S[164]RE IT 450 ADC #$00 460 STA PTR[170]1 470 LDY #$0 ;FILL TEMP WITH ZEROES 480 STY TEMP[170]1 490 STY TEMP[170]2 500 STY TEMP[170]3 510 STY TEMP[170]4 520 ; 530 ; NOW FIND A FIRST APPROXIMATI[145] 540 ; [164] THE SQUARE ROOT 550 ; [189][145]ENT[178] [189][145]ENT[173]2 [170]40.5 560 ; MANTISSA FOUND FROM TABLE 570 LDA (PTR),Y ;[161] [189][145]ENT (Y[178]0) 580 R[176] ;A[178]A[173]A, POP LOW BIT 590 ; CARRY[178]1 WHEN [189][145]ENT ODD 600 BCS ADD ;NO FLAG SET [139] ODD 610 LDX #$80 ;EVEN, SO SET A FLAG BIT 620 STX TEMP[170]1 630 ADD ADC #$40 ;A[178][189][145]ENT OF 1ST APPR 640 STA TEMP ;S[164]RE [189][145]ENT 650 INY ;Y[178]1 660 LDA (PTR),Y ;MANTISSA OF VARIABLE 670 [176]A TEMP[170]1 ;[139] [189][145] ODD ADD 80 680 LSR ;SH[139]T NYBBLE RIGHT 690 LSR 700 LSR 710 LSR 720 TAX 730 LDA TABL,X ;[161] APPROX FROM TABLE 740 STA TEMP[170]1 ;S[164]RE IT IN TEMP MANTISSA 750 ; NOW USE [162][164]N'S METHOD 760 ; X[178](X[170]VAR[173]X)[173]2 770 LDA #$04 780 STA CTR ;SET COUNTER [164] 4 790 LDA #[179]TEMP 800 LDY #0 810 JSR TEMF1 ;[147] FAC#1 FROM TEMP 820 LOOP LDA PTR 830 LDY PTR[170]1 840 JSR DIVID ;DIVIDE FAC#1 [181]O VAR 850 LDA #[179]TEMP 860 LDY #0 870 JSR PLUS ;ADD TEMP [164] FAC#1 880 DEC $61 ;DIVIDE FAC#1 BY 2 890 JSR F1TEM ;PACK FAC#1 [164] TEMP 900 DEC CTR ;DEC[143]ENT THE COUNTER 910 BNE LOOP ;LOOP [139] [168] ZERO 920 LDX PTR 930 LDY PTR[170]1 940 JSR F1MEM ;PACK FAC#1 [164] MEM[176]Y 950 [142] RTS 960 ERR[176]EXIT LDA #$3F ; "?" 970 JSR [153] ;[153] "?" 980 RTS 990 TABL .BYTE 03,11,18,25,32,38,44,50 1000 .BYTE 58,69,79,89,98,107,115,123 1010 .[128]